import {
  Body,
  Controller,
  Delete,
  Get,
  HttpCode,
  Param,
  Patch,
  Post,
  Query,
  Res,
} from '@nestjs/common';
import { CreateUserDto, UpdateUserDto } from './dto';
import { UsersService } from './users.service';

@Controller('auth')
export class UsersController {
  constructor(private usersService: UsersService) {}

  @Post('/signup')
  // @HttpCode(200)
  createUser(@Body() body: CreateUserDto, @Res() res) {
    console.log('req auth/signup', body);
    const { email, password } = body;
    this.usersService.create(email, password);
    return res.status(200).send({
      response: 'данные успешно сохранены',
    });
  }

  @Get()
  async findAll(@Query('email') email: string, @Res() res) {
    const usersArr =
      email === 'all'
        ? await this.usersService.findAll()
        : await this.usersService.find(email);

    return res.status(200).send(usersArr);
  }

  @Get('/:id')
  async findUser(@Param('id') id: string, @Res() res) {
    const user = await this.usersService.findOne(+id);
    return res.status(200).send(user);
  }

  @Delete('/clear')
  // @HttpCode(200)
  clearDataBase(@Res() res) {
    this.usersService.clearDB();
    return res.status(200).send({
      response: 'базза данных очищена, можно гадить заново',
    });
  }

  @Delete('/:id')
  // @HttpCode(200)
  async removeUser(@Param('id') id: string, @Res() res) {
    await this.usersService.remove(+id);
    return res.status(200).send({
      response: 'пользователь успешно удален',
    });
  }

  @Patch('/:id')
  async updateUser(
    @Param('id') id: string,
    @Body() body: UpdateUserDto,
    @Res() res,
  ) {
    const { email, password } = body;
    await this.usersService.update(+id, { email, password });
    return res.status(200).send({
      response: 'данные успешно обновлены',
    });
  }
}
